package com.example.springboot.config.prop.propertysource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;

/**
 * @author wangsh
 * @Des: PropertySource使用，将配置属性加载到对应的实体类
 * 方式一：
 * 通过@PropertySource注解方式引入属性配置文件，在属性字段上使用@Value("${key}")取出值，并赋值给指定的属性字段
 * <p>
 * 方式二：
 * 通过@PropertySource注解方式引入属性配置文件，然后使用spring自带环境变量Environment取出属性值
 * <p>
 * 方式三：
 * 通过ognl解析属性，@PropertySource("file:${app.home}/app.properties")
 * <p>
 * 方式四：
 * 同时包含多个文件：
 * @PropertySource({ "classpath:config.properties",
 * "classpath:db.properties" //if same key, this will 'win'
 * })
 * <p>
 * 方式五：
 * 5.Spring4中对这个注解进行了功能增强，增加了@PropertySources注解，相当于其父标签，下面可以包括多个子PropertySource注解，示例如下：
 * @PropertySources({
 * @PropertySource("classpath:config.properties"),
 * @PropertySource("classpath:db.properties") })
 * @date 2018/6/6 0006下午 4:21
 */
@Configuration
@PropertySource("classpath:propertySource.properties")
public class MysqlConnect2 {

    @Autowired
    private Environment environment;

    public void getMysqlConnect2() {

        String dirverName = environment.getProperty("datasource.dirverName");
        String url = environment.getProperty("datasource.url");
        String name = environment.getProperty("datasource.name");
        String password = environment.getProperty("datasource.password");

        System.out.println("dirverName: " + dirverName + ",url=" + url + ",name=" + name + ",password=" + password);
    }

    /**
     * 获取配置文件随机值
     */
    public void getRandomValue() {

        String secret = environment.getProperty("my.secret");
        String number = environment.getProperty("my.number");
        String name = environment.getProperty("my.bignumber");
        String less = environment.getProperty("my.number.less.than.ten");
        String range = environment.getProperty("my.number.in.range");

        System.out.println("secret: " + secret + ",number=" + number + ",less=" + less + ",range=" + range);
    }


}
